package principal;

import java.util.Hashtable;


public class Vertice {
	
	private int id;
	private Hashtable<Vertice,Arista> adyacentes;
	
	//Constructor con parametro.Le pasamos el nombre del Vertice para identificarlo.
	public Vertice(int id)
	{
		this.setID(id);
		this.adyacentes = new Hashtable<Vertice,Arista>();
	}
	
	//Obtenemos el ID del Vertice.
	public int getID()
	{
		return this.id;
	}
	
	//Seteamos el ID del Vertice.
	private void setID(int id)
	{
		this.id = id;
	}
	
	//Obtenemos la lista de adyacentes del Vertice.
	public Hashtable<Vertice,Arista> getAdyacentes()
	{
		return this.adyacentes;
	}
	
	/*Enlazamos un Vertice con otro por medio de una arista.
	En caso de que ya se encuentren enlazados arrojamos una excepcion de tipo VerticeException
	*/
	public void enlazar(Vertice vertice, Arista arista) throws VerticeException{
	
		if(this.existeEnlace(vertice)){
			throw new VerticeException("Los Vertices ya se encuentran enlazados por una arista.");
		}
		else{
			
			this.adyacentes.put(vertice, arista);	
			vertice.adyacentes.put(this, arista);
		}
	}
	
	/*Quitamos el enlace entre dos Vertices, en caso de que ya esten desenlazados se arroja la 
	excepcion VerticeException.*/
	public void desenlazar(Vertice vertice) throws VerticeException
	{
		if(this.existeEnlace(vertice)){
			
			this.adyacentes.remove(vertice);
			vertice.adyacentes.remove(this);
		}
		else
		{
			throw new VerticeException("Los Vertices no se encuentran enlazados");
		}
	}
	
	/*Nos devuelve true o false dependiendo de si los Vertices se encuentran o no enlazados 
	por una arista.*/
	private boolean existeEnlace(Vertice vertice)
	{
		return this.adyacentes.containsKey(vertice) || vertice.adyacentes.containsKey(this);
	}
	
	

}
